package org.example.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * rdd的算子，也就是rdd的方法
 *
 * groupby
 *
 */
object Spark06_RDD_Operator_GroupBy {
  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val context = new SparkContext(conf)

    val rdd: RDD[Int] = context.makeRDD(
      List(1,2,3,6),2)

    def groupFunction(num:Int) = {
      num%2
    }

    val groupRdd: RDD[(Int, Iterable[Int])] = rdd.groupBy(groupFunction)
    // 以上分组函数，将基偶进行分组
    groupRdd.collect().foreach(println)
    /*
    * 0 (2,6)
    * 1 (1,3)
    *
    * 分组和分区并没有必然的关系
    *
    * groupby会将数据打乱，打散，并且重新组合，这个操作我们称呼为shuffle
    * 由于1 2 3 4 最后会因为你给定的分区算法，打散到不同的分区，但是分区的总数是不变的
    * */


    context.stop();  }
}
